// class Vehicle {};
// class Bus extends Vehicle {}
// let bus = new Bus();
// console.log(bus instanceof Bus); // true
// console.log(bus instanceof Vehicle); // true
// console.log('bus:',bus.__proto__);// bus: Bus {}
// console.log('bus:',bus.__proto__.__proto__);// bus: Vehicle {}

// 派生类都会通过原型链访问到类和原型上定义的方法
// class Vehicle {
//   identifyPrototype(id) {
//     console.log(id, this);
//   }
//   static identifyClass(id) {
//     console.log(id, this);
//   }
// }
// class Bus extends Vehicle {}
// let vehicle = new Vehicle();
// let bus = new Bus();
// vehicle.identifyPrototype("vehicle"); //vehicle Vehicle {}
// bus.identifyPrototype("bus"); //bus Bus {}
// Vehicle.identifyClass("Vehicle"); //Vehicle [Function: Vehicle]
// Bus.identifyClass("Bus"); //Bus [Function: Bus]

// class Vehicle {
//   constructor(){
//     this.hasEngineer = true
//   }
//   static identify(){
//     console.log('Vehicle:',this);
//   }
//   show(){
//     console.log('show-vehicle');
//   }
// }
// class Bus extends Vehicle {
//   constructor(){
//     super();
//     console.log(this instanceof Vehicle);
//     console.log(this);
//   }
//   static identify(){
//     super.identify()
//   }
//   show1(){
//     super.show()
//   }
// }
// let bus = new Bus();
// // true
// // Bus { hasEngineer: true }
// Bus.identify()
// // Vehicle [Function: Bus]
// bus.show1()

// class Vehicle {
//   constructor(name) {
//     this.name = name;
//     console.log(this.name);
//   }
// }
// class Bus extends Vehicle {
//   constructor(){
//     return {}
//   }
// }
// let bus = new Bus("Alice");//Alice

// 抽象基类
class Vehicle {
  constructor() {
    console.log(new.target);
    if (new.target === Vehicle) {
      throw new Error("Vehicle cannot be directly instantiated");
    }
  }
}
class Bus extends Vehicle {}
let bus = new Bus();//[Function: Bus]
let vehicle = new Vehicle();//throw new Error("Vehicle cannot be directly instantiated");